Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

댓글 수정 기능 구현 #303

Merged
merged 12 commits into from
Apr 20, 2023
Merged

댓글 수정 기능 구현 #303

merged 12 commits into from
Apr 20, 2023

Conversation

WhiteHyun
Copy link
Member

@WhiteHyun WhiteHyun commented Apr 19, 2023

📌 PR 요약

🌱 작업한 내용

  • 댓글 수정 기능을 구현했습니다
  • 답글 또는 수정이 완료되었을 때 댓글 작성란 윗 부분(aka. DecoratorView)가 보이지 않도록 처리했습니다. ([FIX] 게시판 자잘한 수정 사항 #302)
  • 기존 코드를 재사용하려고 하니 무지성으로 구현해둔 게 있어서, 일부 리팩토링을 진행했습니다. 아래 설명 참고

🌱 PR 포인트

ReplyView를 DecoratorView로 변경했습니다.

답장 뿐 아니라 댓글 수정할 때도 ReplyView가 사용되기 때문입니다.

댓글 수정, 댓글 작성, 답글 작성, 댓글 삭제를 각각 분리하여 구현하되, 비슷한 성격을 가진 Item들을 묶어 관리하였습니다.

CommentOptionSubject: 현재 댓글 정보를 처리하기 위한 옵션을 처리합니다. (댓(답)글인지, 삭제인지, 수정인지)
TargetIDSubject: replyIDrecentSelectedCommentID를 묶었습니다. 답글이든, 삭제이든, 수정이든 결국에는 타겟팅 되어있는 ID를 가지고 처리하는 녀석들이기 때문에, 하나의 Subject로 관리했습니다.

BottomSheet를 띄울 때 commentID도 initializer에 넣어 처리하도록 구현했습니다.

기존에는 BottomSheet를 요청한 CellcommentID를 미리 갖고있었으나, 나중에 다른 CellBottomSheet요청 버튼을 누른 뒤 나가버리게 되면 commentID가 재갱신되어버리는 상황이 발생되기 때문에 시나리오상 버그가 발생할 우려가 존재했습니다. 따라서, 확실하게 BottomSheet로부터 댓글 수정 버튼, 댓글 삭제 버튼이 눌려졌다면 delegate에서 commentID와 함께 호출하는 방식을 사용하도록 하여 사용자로부터 의도치 않는 현상을 방지할 수 있도록 수정하였습니다.

📸 스크린샷

스크린샷
댓글 수정 시나리오

📮 관련 이슈

댓글 수정 버튼과 ViewModel 간 바인딩을 구현했습니다.
답장 뿐 아니라 댓글 수정시에도 ReplyView가 사용되어 이름을 변경했습니다.
이 때 ReplyVIew에 들어가는 UILabel과 UIButton의 text도 바뀌므로
두 텍스트 값을 설정하기 위한 프로퍼티(labelText, buttonText) 설정도 함께 구현했습니다
수정 버튼, 신고 버튼 그리고 삭제 버튼이 눌렸을 때, 대상이 되는 id도 함게 반환하도록 재구현했습니다.
기존에는 BottomSheet를 누르는 즉시 id를 반환하였는데, 이 경우 문제가 될 수 있는 시나리오가 존재합니다.
예를 들면, 수정 버튼을 누르고 댓글을 수정하는 도중 다른 댓글의 옵션 버튼을 누르면 그 즉시 id가 바뀌게 됩니다.
이 경우 내가 수정하고자 했던 id와 다른 값으로 변경되기 때문에 문제가 야기될 수 있습니다.
답글, 댓글 수정, 댓글 삭제 시 필요한 타겟 ID를 두 Subject로 처리하고 있었는데,
이를 하나의 Subject로 통합하였습니다.
댓글 수정 옵션과 삭제 옵션을 두 가지로 나누어 Subject를 처리했으나,
코드 가독성과 확장성을 고려하여 하나의 Subject로 통합했습니다.
통합하는 과정에서 `Void`로 emit했던 것이 `CommentOption`이라는 새로운 열거형 타입으로
변경되었고, CommentOption은 댓글 생성, 수정, 삭제와 연관되어 동작합니다.
댓글을 수정할 수 있도록 기존 댓글 텍스트를 텍스트필드란에 삽입하는 코드를 구현했습니다.
@WhiteHyun WhiteHyun added 🐛 bug Something isn't working 😎 Enhancement New feature or request 🍎 ConfigureUI 화면 프로토타입 UI 구현 D+1 PR올린 다음날 까지는 리뷰 부탁드립니다 🥳MainPage labels Apr 19, 2023
@WhiteHyun WhiteHyun requested review from dlrjswns and soobin-k April 19, 2023 09:24
@WhiteHyun WhiteHyun self-assigned this Apr 19, 2023
Copy link
Contributor

@dlrjswns dlrjswns left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 승현님❤️

Comment on lines +28 to +34
var commentText: String {
get {
textView.text
} set {
textView.text = newValue
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 이런식으로 하면 훨씬 가독성있겠네요👍

@WhiteHyun WhiteHyun merged commit 798334f into develop Apr 20, 2023
@WhiteHyun WhiteHyun deleted the feat/211-Comment/Edit branch April 20, 2023 08:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working 🍎 ConfigureUI 화면 프로토타입 UI 구현 D+1 PR올린 다음날 까지는 리뷰 부탁드립니다 😎 Enhancement New feature or request 🥳MainPage
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEAT] 게시글 + 댓글 기능 구현
2 participants